【X68000(Z)アセンブラ講座 第016回 アドレッシングモード】 2025/04/22   こんにちは。 今回はアドレッシングモードについて説明します。 モードによってはPCと言うレジスターを使用します。 PCとはプログラムカウンターの事で 次に実行する命令のアドレスが格納されています。 [ アドレッシングモード ] @データレジスタ直接形式 書式 : Dn[n=0〜7] 命令中のデータレジスターの中を直接操作する。 clr.l D0 d0の中身をゼロクリアする move.w D1,$E00000 D1の数値をアドレス$E00000に置く Aアドレスレジスタ直接形式 書式 : An[n=0〜7] 命令中のアドレスレジスターの中を直接操作する。 move.l A0,$100000 A0の中身をアドレス$100000に置く move.w $200000,A1 アドレス$200000のワードデータをロングワードに符号拡張してA1に代入 Bアドレスレジスタ間接形式 書式 : (An) [n=0〜7] Anの中の数値をアクセスするアドレスとして見なす。 move.w (A0),D0 A0が指し示すアドレスからD0にデータをコピーする Cポストインクリメント・アドレスレジスタ間接形式 書式 : (An)+ [n=0〜7] Anの中の数値をアドレスと見なしてアクセスした後に データサイズ(1/2/4バイト)ぶんの数値をAnに足す。 move.w (A0)+,D0 A0が指し示すアドレスからD0にデータをコピーした後にA0に2を足す Dプリデクリメント・アドレスレジスタ間接形式 書式 : -(An) [n=0〜7] データサイズ(1/2/4バイト)ぶんの数値をAnから引いた後に Anの中の数値をアドレスと見なしてアクセスする。 move.w -(A0),D0 A0から2を引いてA0が指し示すアドレスからD0にデータをコピーする Eディスプレースメント付きアドレスレジスタ間接形式 書式 : d16(An),D0 [n=0〜7] アドレスレジスタの値にd16(-32768〜+32767)のディスプレースメントを足したアドレスにアクセスする disp4 equ 4 move.w disp4(A0),D0 A0に4を足したアドレスのデータをD0にコピーする Fインデックス付アドレスレジスタ間接形式 書式 : d8(An,IX) [IX=An or Dn (n=0〜7)] アドレスレジスタの値にIXの値とd8(-128〜+127)のディスプレースメントを足したアドレスにアクセスする disp8 equ 8 move.w disp8(A0,D0),d1 A0に8とD0の値を足したアドレスのデータをD1にコピーする G絶対ショートアドレス形式 書式 : <2バイトの絶対アドレス> 指定範囲 アクセス範囲 (1) $0000〜$7FFF $00000000〜$00007FFF (2) $8000〜$FFFF $FFFF8000〜$FFFFFFFF (2)の扱い方はアセンブラごとに解釈が違うので (2)を使いたい方はアセンブルされた結果を把握して下さい。 move.w $4000,D0 H絶対ロングアドレス形式 書式 : <2バイト以上の絶対アドレス : $00000000〜$FFFFFFFF> move.w #0,$00C00000 Iディスプレースメント付プログラムカウンター相対形式 書式 : d16(PC) PCに2を足した値にd16(-32768〜+32767)を足したアドレスをアクセスする disp1 equ 128 move.w #disp1(PC),D0 D0にPCに2と128を足したアドレスのデータをコピーする Jインデックス付プログラムカウンター相対形式 書式 : d8(PC,IX) [IX=An or Dn (n=0〜7)] PCにd8(-128〜+127)とIXを足したアドレスをアクセスする disp2 equ 4 move.w disp2(PC,D0),D1 D1にPCにD0を足したアドレスにあるデータをコピーする Kイミディエイトデータ形式 書式 : #<絶対値> move.w #16,D0 D0に値16を入れる LSR/CCR形式 今回はゲームに使う機会は殆どないと言う事で省略させて頂きます。 詳細を知りたいという方は68000MPU本をゲットして下さい。 因みに僕はX68000やMEGA-CDのゲームを作るにあたり SR(ステータスレジスタ)やCCR(コンデションコードレジスタ)を直接使う機会はありませんでした。 Mクイック・イミディエイト形式 MOVEQ : 1バイトデータの高速転送 ADDQ : 1〜8の高速インクリメント(足し算)命令 SUBQ : 1〜8の高速デクリメント(引き算)命令 MOVEQ.L #68,D0 * D0に値68を代入 ADDQ.L #1,D1 * D1に1を足す SUBQ.L #8,D2 * D2から8を引く Nインプリシット(暗黙的)参照 例えばBLT命令は暗黙的にPCを参照して条件分岐します。 他にも暗黙的にPCやSRを参照する命令がたくさんあります。 書籍「68000 PROGRAMMER'S HAND BOOK」をとってみても 全てのパターンについて書かれていて それを丸ごとコピーするのは気が引けるので 皆さん各自で68000MPU本をゲットして自力で勉強してほしいと思います。 今回で本講座の初級編(のつもり)は終了です。 皆さん、お疲れ様でした!! そして今まで読んで頂いた皆さん、有り難う御座いますm(__)m 次回からは何をするのかまだ決まってはいませんが 今後とも宜しくお願い致します!! [EOF]